//package com.hzeport.bgs22emduty.xxljob;
//
//
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.dynamic.datasource.annotation.DS;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.hzeport.bgs22emduty.config.SystemConfig;
//import com.hzeport.bgs22emduty.config.WebSocketServer;
//import com.hzeport.bgs22emduty.dto.DutyScheduleInfoTimeDTO;
//import com.hzeport.bgs22emduty.dto.DutyScheduleInfoTimeDetailDTO;
//import com.hzeport.bgs22emduty.entity.*;
//
//import com.hzeport.bgs22emduty.outbound.*;
//import com.hzeport.bgs22emduty.service.BaseDeptInfoService;
//import com.hzeport.bgs22emduty.service.DutyScheduleInfoService;
//import com.hzeport.bgs22emduty.service.DutySignInfoService;
//import com.xxl.job.core.biz.model.ReturnT;
//import com.xxl.job.core.handler.annotation.XxlJob;
//import lombok.extern.slf4j.Slf4j;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.annotation.Transactional;
//import org.springframework.util.CollectionUtils;
//import org.springframework.util.StringUtils;
//
//import javax.annotation.Resource;
//import java.time.*;
//import java.time.temporal.ChronoField;
//import java.util.*;
//import java.util.concurrent.ConcurrentHashMap;
//import java.util.function.Function;
//import java.util.function.Predicate;
//import java.util.stream.Collectors;
//
//
///**
// * XxlJob开发示例（Bean模式）
// * <p>
// * 开发步骤：
// * 1、任务开发：在Spring Bean实例中，开发Job方法；
// * 2、注解配置：为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")"，注解value值对应的是调度中心新建任务的JobHandler属性的值。
// * 3、执行日志：需要通过 "XxlJobHelper.log" 打印执行日志；
// * 4、任务结果：默认任务结果为 "成功" 状态，不需要主动设置；如有诉求，比如设置任务结果为失败，可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果；
// *
// * @author xuxueli 2019-12-11 21:52:51
// */
//@Component
//@Slf4j
//public class SampleXxlJob {
//
//    private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
//    @Resource
//    private JDBCUtil jdbcUtil;
//    @Resource
//    private DutySignInfoRepository dutySignInfoRepository;
//    @Resource
//    private DutyScheduleInfoRepository dutyScheduleInfoRepository;
//    @Resource
//    private ParamDutyRepository paramDutyRepository;
//    @Resource
//    private SystemConfig systemConfig;
//    @Resource
//    private ScreenDutyLogRepository screenDutyLogRepository;
//    @Resource
//    private DutyScheduleInfoService dutyScheduleInfoService;
//    @Resource
//    private WebSocketServer webSocketServer;
//    /**
//     * 此次，我们发送提醒短信
//     */
//    /** todo 部门过滤 无工号过滤
//     * 1、简单任务示例（Bean模式）
//     */
//    @XxlJob("getFaceLogin")
//    @Transactional(rollbackFor = Exception.class)
//    public ReturnT<String> getUserInfo(String param) throws Exception {
//        try {
//            LocalDateTime now=LocalDateTime.now();
//            log.info("getFaceLogin"+now);
//            List<FaceLogin> faceLogins=jdbcUtil.doSelect(now);
//            if (!CollectionUtils.isEmpty(faceLogins)){
//                for (FaceLogin faceLogin:faceLogins){
//                    List<DutyScheduleInfo>  dutyScheduleInfos=dutyScheduleInfoRepository.list(new LambdaQueryWrapper<DutyScheduleInfo>()
//                            .le(DutyScheduleInfo::getDDay,LocalDate.now()).ge(DutyScheduleInfo::getDDay,LocalDate.now().minusDays(5L)).eq(DutyScheduleInfo::getDUserno,faceLogin.getEventCard())
//                            .orderByDesc(DutyScheduleInfo::getDStartDateTime));
//                    DutyScheduleInfo dutyScheduleInfo=getSignInTaragetScheduleInfo(dutyScheduleInfos,now);
//                    log.info("获取到用户"+faceLogin.getEventCard()+"的人脸，进而获取其最近班次"+dutyScheduleInfo);
//                    if (dutyScheduleInfo==null){
//                        continue;
//                    }
//                    DutySignInfo dutySignInfo=dutySignInfoRepository.getOne(new LambdaQueryWrapper<DutySignInfo>()
//                    .eq(DutySignInfo::getDId,dutyScheduleInfo.getId()));
//                    if (dutySignInfo!=null){
//                        if (StringUtils.isEmpty(dutySignInfo.getDSigninType())){
//                            log.info("对用户"+faceLogin.getEventCard()+"进行签到");
//                            dutySignInfo.setDSigninType("1");
//                            if (dutySignInfo.getDSigninTime()==null) {
//                                dutySignInfo.setDSigninTime(faceLogin.getEventTime());
//                            }
//                            dutySignInfoRepository.updateById(dutySignInfo);
//                            continue;
//                        }
//                        ParamDuty paramDuty=guavacacheUtils.getParamDuty(dutyScheduleInfo.getDutyTimesId());
//                        if (paramDuty!=null){
//                            LocalDateTime endTime;
//                            if (paramDuty.getDStartTime().compareTo(paramDuty.getDEndTime())<0){
//                                endTime=dutyScheduleInfo.getDDay().atTime(paramDuty.getDEndTime());
//                            }else {
//                                endTime=dutyScheduleInfo.getDDay().atTime(paramDuty.getDEndTime());
//                            }
//
//                            if (now.plusMinutes(15l).compareTo(endTime)>0){
//                                log.info("对用户"+faceLogin.getEventCard()+"进行签退");
//                                dutySignInfo.setDSignoutType("1");
//                                dutySignInfo.setDSignoutTime(LocalDateTime.now());
//                                dutySignInfoRepository.updateById(dutySignInfo);
//                                if (screenDutyLogRepository.count(new LambdaQueryWrapper<ScreenDutyLog>()
//                                        .eq(ScreenDutyLog::getCustomId,dutyScheduleInfo.getCustomId())
//                                        .gt(ScreenDutyLog::getUpdateTime,dutyScheduleInfo.getDDay().atStartOfDay()))==0){
//                                    webSocketServer.sendAllHZ("签退前需填写日志！",null);
//                                }
//                                if (!"1".equals(dutySignInfo.getIsHrSend())) {
//                                    dutyScheduleInfoService.doApplyRetry(dutyScheduleInfos.get(0), dutySignInfo);
//                                }
//                            }
//                        }
//                    }else {
//                        log.info("获取到用户"+faceLogin.getEventCard()+"的人脸，但是其无dutySignInfo记录");
//                    }
//                }
//            }
//            //通讯录部门列表
//        }catch (Exception e){
//            log.error("人脸识别接口",e);
//        }
//        return ReturnT.SUCCESS;
//    }
//
//    private DutyScheduleInfo getSignInTaragetScheduleInfo(List<DutyScheduleInfo> dutyScheduleInfos, LocalDateTime now) {
//        for (DutyScheduleInfo dutyScheduleInfo:dutyScheduleInfos){
//            ParamDuty paramDuty=guavacacheUtils.getParamDuty(dutyScheduleInfo.getDutyTimesId());
//            if (paramDuty!=null){
//                LocalTime startTime=paramDuty.getDStartTime();
//                LocalDateTime startDateTime;
//                startDateTime=dutyScheduleInfo.getDDay().atTime(startTime).minusMinutes(systemConfig.getFaceSignDelayMinutes());
//                if (now.compareTo(startDateTime)>0){
//                    return dutyScheduleInfo;
//                }
//            }
//        }
//        return null;
//    }
//}